package br.uniceub.fsw.talentos.dao;

import br.uniceub.fsw.arquitetura.persistencia.dao.BaseDAO;
import br.uniceub.fsw.arquitetura.persistencia.dao.ConstrutorSQL;
import br.uniceub.fsw.talentos.vo.CapacitacaoVO;
import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

/** 
 * Data Access Object da entidade TB_Capacitacao. Essa classe é responsável por todas as 
 * operações de banco de dados relacionadas à entidade.* 
 *
 * @author Bruno Cesar Fernandes 2013498/7
 */
public class CapacitacaoDAO extends BaseDAO<CapacitacaoVO> {
    
    @Override
    public void inserir(CapacitacaoVO capacitacao) {

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("INSERT INTO TB_Capacitacao(CD_Talento, CD_Habilidade, DT_Capacitacao, ST_Certificado)");
        query.append("VALUES (?, ?, ?, ?)");

        List<?> parametros = criarParametros(capacitacao.getCdTalento(), capacitacao.getCdHabilidade(),
                capacitacao.getDtCapacitacao(), capacitacao.getStCertificado());

        executarInsercao(query.toString(), parametros);
    }
    
    @Override
    public void alterar(CapacitacaoVO capacitacao) {

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("UPDATE TB_Capacitacao SET DT_Capacitacao = ?,");
        query.append("ST_Certificado = ?");
        query.append("WHERE CD_Talento = ? AND CD_Habilidade = ?");

        List<?> parametros = criarParametros(capacitacao.getDtCapacitacao(), capacitacao.getStCertificado(),
                capacitacao.getCdTalento(), capacitacao.getCdHabilidade());

        executarAlteracao(query.toString(), parametros);
    }
    
    @Override
    public void excluir(CapacitacaoVO capacitacao) {

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("DELETE FROM TB_Capacitacao");
        query.append("WHERE CD_Talento = ? AND CD_Habilidade = ?");

        executarAlteracao(query.toString(), criarParametros(capacitacao.getCdTalento(), capacitacao.getCdHabilidade()));
    }  
    
    @Override
    public CapacitacaoVO consultarPorId(Serializable id) {
        return null;
    }
    
    @Override
    public List<CapacitacaoVO> consultarPorExemplo(CapacitacaoVO capacitacao) {

        List<CapacitacaoVO> listaRetorno = null;

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("SELECT * FROM TB_Capacitacao T WHERE 1=1");

        mapearQueryParaExemplo(query, capacitacao);

        listaRetorno = consultar(query.toString(), recuperarParametros());

        return listaRetorno;
    }
    
    @Override
    protected CapacitacaoVO extrairObjetoResultado(ResultSet rs) throws SQLException {

        CapacitacaoVO capacitacao = new CapacitacaoVO();
        
        capacitacao.setCdTalento(new Integer(rs.getInt("CD_Talento")));
        capacitacao.setCdHabilidade(new Integer(rs.getInt("CD_Habilidade")));
        capacitacao.setDtCapacitacao(rs.getDate("DT_Capacitacao"));
        capacitacao.setStCertificado(new Character(rs.getString("ST_Certificado").charAt(0)));

        return capacitacao;
    }    

    @Override
    protected void mapearQueryParaExemplo(ConstrutorSQL query, CapacitacaoVO capacitacao) {

        if (capacitacao.getCdTalento() != null) {
            query.append("AND T.CD_Talento = ?");
            adicionarParametro(capacitacao.getCdTalento());
        }
        
        if (capacitacao.getCdHabilidade() != null) {
            query.append("AND T.CD_Habilidade = ?");
            adicionarParametro(capacitacao.getCdHabilidade());
        }        
        
        if (capacitacao.getStCertificado() != null) {
            query.append("AND T.ST_Certificado LIKE ?");
            adicionarParametro("%" + capacitacao.getStCertificado() + "%");
        }

        if (capacitacao.getDtCapacitacao() != null) {
            query.append("AND T.DT_Capacitacao = ?");
            adicionarParametro(capacitacao.getDtCapacitacao());
        }
    }    
    
}
